package org.cnam.mobileShopping.dao;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.cnam.mobileShopping.bean.Category;
import org.cnam.mobileShopping.sql.DbAdapter;
import org.cnam.mobileShopping.wsclient.WSClient;
import org.json.JSONException;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class CategoryDAO extends DAO<Category> {

	/**
	 * Contructeur de l'accès à la base de données concernant les catégories
	 * 
	 * @param context
	 */
	public CategoryDAO(Context context) {
		sqlHelper = new DbAdapter(context);
	}

	@Override
	public long create(Category obj) {
		// envoit du produit à la base de données distante
		// TODO Send to the web service
		// récupération d'un produit dans la base de données locale
		SQLiteDatabase db = sqlHelper.getWritableDatabase();

		ContentValues cv = new ContentValues();
		cv.put("categoryid", obj.getCategoryid());
		cv.put("label", obj.getLabel());
		long toReturn = db.insert("category", "", cv);

		db.close();
		return toReturn;
	}

	@Override
	public boolean delete(Category obj) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean update(Category obj) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Category find(int id) {
		SQLiteDatabase db = sqlHelper.getReadableDatabase();
		Category toReturn = null;
		Cursor cursor = db.query("category", new String[] { "categoryid",
				"label" }, "categoryid=?", new String[] { String.valueOf(id) },
				null, null, null);
		if (cursor.moveToFirst()) {
			do {
				toReturn = new Category();
				toReturn.setCategoryid(cursor.getInt(0));
				toReturn.setLabel(cursor.getString(1));
			} while (cursor.moveToNext());
		}
		if (cursor != null && !cursor.isClosed()) {
			cursor.close();
		}
		db.close();
		return toReturn;
	}

	@Override
	public List<Category> findAll() {
		List<Category> toReturn = new ArrayList<Category>();
		// TODO faire l'accès à la base de données via WebServices
		// toReturn = WebServiceController.getProduit(id);
		// <Mock Data>
		// toReturn = new Product();
		// </Mock Data>
		// envoit du produit à la base de données distante
		// TODO Send to the web service
		// récupération d'un produit dans la base de données locale
		SQLiteDatabase db = sqlHelper.getReadableDatabase();

		Cursor cursor = db.query("category", new String[] { "categoryid",
				"label" }, "", null, null, null, null);
		if (cursor.moveToFirst()) {
			do {
				Category c = new Category();
				c.setCategoryid(cursor.getInt(0));
				c.setLabel(cursor.getString(1));
				toReturn.add(c);
			} while (cursor.moveToNext());
		}
		if (cursor != null && !cursor.isClosed()) {
			cursor.close();
		}
		db.close();
		return toReturn;
	}

	@Override
	public void synchronise(Date lastupdate, Integer userId, Context context) {
		List<Category> categories = null;
		try {
			categories = WSClient.getInstance().getCategoryList(lastupdate);
			if (categories != null) {
				for (Category c : categories) {
					if (find(c.getCategoryid()) == null) {
						this.create(c);
					}
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	@Override
	public Category findByCommonId(String commonid) {
		// TODO Auto-generated method stub
		return null;
	}

}
